/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.saber.certificacao.modelos;

import br.com.saber.certificacao.modelos.validadores.interfaces.ValidadoInterface;
import java.util.Date;
import javax.persistence.*;
import org.apache.commons.lang.StringUtils;

/**
 *
 * @author Guilherme
 */
@Entity
@Table(name = "tutoriais")
public class Tutorial implements ValidadoInterface, Comparable<Tutorial> {

    public static final int LIMIT_CARACTERES_TITULO = 90;
    public static final int LIMIT_CARACTERES_DESCRICAO = 300;
    public static final int LIMIT_CARACTERES_INDICE = 100;
    public static final int LIMIT_CARACTERES_URL = 300;
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, unique = true)
    private Long id;
    
    @Column(name="titulo",length = LIMIT_CARACTERES_TITULO, nullable=false)
    private String tituloTutorial;
    
    @Column(name="descricao",length = LIMIT_CARACTERES_DESCRICAO, nullable=false)
    private String descricao;
    
    @Temporal(TemporalType.DATE)
    @Column(name="data_cadastro", nullable=false)
    private Date dataCadastro = new Date();
    
    @Column(name="indices", nullable=false, length=LIMIT_CARACTERES_INDICE)
    private String indice;
    
    @Column(name="url", nullable=false, length=LIMIT_CARACTERES_URL)
    private String url;

    @ManyToOne
    @JoinColumn(name="usuario_id", referencedColumnName="id")
    private Usuario usuario;
    
    @Override
    public int compareTo(Tutorial o) {
        int i = 0;
        if(i == 0) i = dataCadastro.compareTo(o.dataCadastro);
        if(i == 0) i = tituloTutorial.compareTo(o.tituloTutorial);
        if(i == 0) i = descricao.compareTo(o.descricao);
        return i;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
//        if(!StringUtils.startsWith(descricao, " ")){
//            descricao = " " + descricao;
//        }
        this.descricao = descricao;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getIndice() {
        return indice;
    }

    public void setIndice(String indice) {
        this.indice = indice;
    }

    public String getTituloTutorial() {
        return tituloTutorial;
    }

    public void setTituloTutorial(String tituloTutorial) {
        this.tituloTutorial = tituloTutorial;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Tutorial other = (Tutorial) obj;
        if ((this.tituloTutorial == null) ? (other.tituloTutorial != null) : !this.tituloTutorial.equals(other.tituloTutorial)) {
            return false;
        }
        if ((this.descricao == null) ? (other.descricao != null) : !this.descricao.equals(other.descricao)) {
            return false;
        }
        if (this.dataCadastro != other.dataCadastro && (this.dataCadastro == null || !this.dataCadastro.equals(other.dataCadastro))) {
            return false;
        }
        if ((this.indice == null) ? (other.indice != null) : !this.indice.equals(other.indice)) {
            return false;
        }
        if ((this.url == null) ? (other.url != null) : !this.url.equals(other.url)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 83 * hash + (this.tituloTutorial != null ? this.tituloTutorial.hashCode() : 0);
        return hash;
    }
    
    
}
